package com.example.chat.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

/**
 * SpringBoot上传文件工具类
 */

@SuppressWarnings("ResultOfMethodCallIgnored")
public class FileHandleUtil {

    /**
     * 文件存放的目录
     **/
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    /**
     * 上传单个文件
     * 最后文件存放路径为：static/upload/image/test.jpg
     * 文件访问路径为：http://127.0.0.1:8080/upload/image/test.jpg
     * 该方法返回值为：/upload/image/test.jpg
     *
     * @param inputStream 文件流
     * @param filename    文件名，如：test.jpg
     * @return 成功：上传后的文件访问路径，失败返回：null
     */
    public static String upload(InputStream inputStream, String filename, String path, String type, boolean flag) {
        String date = sdf.format(new Date());
        if (flag)
            createDirIfNotExists("/" + date + "/", path);
        else
            createDirIfNotExists("/" + date + "/", path);
        filename = filename.replace("-", "");
        String resultPath = "";
        if (flag)
            resultPath = type + "/" + date + "/" + filename;
        else
            resultPath = type + "/" + date + "/" + filename;
        //存文件
        File uploadFile = new File(path, resultPath);
        System.out.println(uploadFile.getAbsolutePath());
        try {
            FileUtils.copyInputStreamToFile(inputStream, uploadFile);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        return resultPath;
    }

    /**
     * 创建文件夹路径
     */
    private static void createDirIfNotExists(String fileDir, String path) {

        //获取跟目录
        File file;
        file = new File(path);
        if (!file.exists()) {
            file = new File("");
        }

        /**
         * 绝对路径
         **/
        String absolutePath = file.getAbsolutePath();

        File upload = new File(absolutePath, fileDir);
        if (!upload.exists()) {
            upload.mkdirs();
        }
    }

//    /**
//     * 删除文件
//     *
//     * @param path 文件访问的路径upload开始 如： /upload/image/test.jpg
//     * @return true 删除成功； false 删除失败
//     */
//    public static boolean delete(String path) {
//        try {
//            File file = ResourceUtils.getFile("classpath:static/" + path);
//            return file.delete();
//        } catch (Exception e) {
//            return false;
//        }
//    }

    /**
     * 删除文件
     *
     * @param path 文件访问的路径upload开始 如： /upload/image/
     * @return true 删除成功； false 删除失败
     */
    public static boolean delete(String path) {
        try {
            File directory = ResourceUtils.getFile("classpath:static/" + path);
            for (File file : Objects.requireNonNull(directory.listFiles())) {
                if (!file.isDirectory()) {
                    file.delete();
                }
            }
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public static boolean isExists(String path) {
        try {
            ResourceUtils.getFile("classpath:static/" + path);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    public static Object check(MultipartFile file, String msg, boolean b) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("status", 0);
        if (file == null) {
            jsonObject.put("msg", b ? msg : "请上传pdf文件");
            return jsonObject;
        }
        String fileName = file.getOriginalFilename();
        assert fileName != null;
        fileName = fileName.toLowerCase();
        if (!fileName.endsWith(".jpg") && !fileName.endsWith(".png") && b) {
            jsonObject.put("msg", msg);
            return jsonObject;
        }
        if ((fileName.endsWith(".jpg") || fileName.endsWith(".png")) && b && file.getSize() / 1024 > 400) {
            jsonObject.put("msg", "图片不能大于400KB");
            return jsonObject;
        }
        if (!fileName.endsWith(".pdf") && !b) {
            jsonObject.put("msg", "请上传pdf文件");
            return jsonObject;
        }
        if (fileName.endsWith(".pdf") && !b && file.getSize() / 1024 > 2 * 1024) {
            jsonObject.put("msg", "pdf文件不能大于2MB");
            return jsonObject;
        }
        String[] splits = fileName.split("\\.");
        return splits[splits.length - 1].toLowerCase();
    }


}